package org.lanyu.springainovel.novel.service;

import org.lanyu.springainovel.novel.entity.BookOutline;
import org.lanyu.springainovel.novel.dto.NovelPlan;
import com.baomidou.mybatisplus.extension.service.IService;
import org.lanyu.springainovel.novel.vo.NovelOutlineRequest;
import org.lanyu.springainovel.novel.vo.OutlineUpdateRequest;
import reactor.core.publisher.Flux;

import java.util.List;

/**
 * 小说大纲服务接口
 */
public interface NovelOutlineService extends IService<BookOutline> {

    
    /**
     * 流式生成小说大纲
     * 
     * @param request 大纲生成请求
     * @return 流式大纲内容
     */
    Flux<String> generateNovelOutlineStream(NovelOutlineRequest request);
    
    /**
     * 根据书籍ID获取最新版本大纲
     * 
     * @param bookId 书籍ID
     * @return 大纲信息
     */
    BookOutline getOutlineByBookId(Long bookId);

    /**
     * 根据书籍ID和版本号查询大纲
     * @param bookId
     * @param version
     * @return
     */
    BookOutline getOutlineByBookVersion(Long bookId,Long version);

    /**
     * 根据书籍ID查询大纲列表（按版本号倒序）
     * 
     * @param bookId 书籍ID
     * @return 大纲列表（按版本号倒序）
     */
    List<BookOutline> getOutlinesByBookIdOrderByVersionDesc(Long bookId);
    
    /**
     * 保存或更新大纲
     * 
     * @param newOutline 大纲信息
     * @return 新增或更新后的大纲信息
     */
    BookOutline saveOrUpdateOutline(OutlineUpdateRequest newOutline);
    /**
     * 根据ID查询大纲
     * 
     * @param id 大纲ID
     * @return 大纲信息
     */
    BookOutline getOutlineById(Long id);
    
    /**
     * 删除书籍大纲及相关章节内容
     * 
     * @param bookId 书籍ID
     * @param userId 用户ID
     * @return 删除成功
     */
    boolean deleteOutlineAndChapters(Long bookId, Long userId);
    
    /**
     * 删除指定版本的大纲
     * 
     * @param bookId 书籍ID
     * @param version 版本号
     * @return 删除成功
     */
    boolean deleteOutlineByVersion(Long bookId, Long version);

    /**
     * 归档大纲，创建新版本
     *
     * @param bookId 书籍ID
     * @param outlineDetails 大纲内容
     * @param chapterPlanning 章节规划
     * @return 新创建的大纲信息
     */
    BookOutline archiveOutline(Long bookId, String outlineDetails, String chapterPlanning, Integer version);
}